//
//  BuzzEntry.m
//  Buzz API Demo
//
//  Created by Peter Hopkins on 5/10/10.
//  Copyright 2010 Google Inc. All rights reserved.
//
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.
//

#import "BuzzEntry.h"

#import "ActivityStreamsElements.h"
#import "BuzzAttachment.h"
#import "BuzzConstants.h"
#import "BuzzVisibilityElements.h"
#import "PocoConstants.h"
#import "PocoElements.h"

#import "GDataBaseElements.h"
#import "GDataLink.h"
#import "GDataThreadingElements.h"

@interface BuzzCount : GDataAttribute <GDataExtension>
@end

@implementation BuzzEntry

- (void)addExtensionDeclarations {
  [super addExtensionDeclarations];

  [self addExtensionDeclarationForParentClass:[self class]
                                 childClasses:
   [BuzzVisibility class], [ActivityVerb class], [ActivityObject class], nil];

  [GDataThreadingLink addThreadingLinkExtensionDeclarationsToObject:self];

  [self addAttributeExtensionDeclarationForParentClass:[GDataLink class]
                                            childClass:[BuzzCount class]];

  [self addExtensionDeclarationForParentClass:[ActivityObject class]
                                   childClass:[BuzzAttachment class]];

  [GDataPerson addPocoPersonExtensionDeclarationsToObject:self];
  [self addExtensionDeclarationForParentClass:[GDataAtomAuthor class]
                                   childClass:[ActivityObjectType class]];
}


- (GDataLink *)likedLink {
  return [self linkWithRelAttributeValue:kLikedLinkRel type:kPocoType];
}

- (BuzzVisibility *)visibility {
  return [self objectForExtensionClass:[BuzzVisibility class]];
}

- (NSString *)activityVerb {
  return [[self objectForExtensionClass:[ActivityVerb class]] stringValue];
}

- (ActivityObject *)activityObject {
  return [self objectForExtensionClass:[ActivityObject class]];
}

- (NSArray *)attachments {
  return [[self activityObject] objectsForExtensionClass:[BuzzAttachment class]];
}

+ (NSNumber *)buzzCountForLink:(GDataLink *)link {
  NSString *str = [link attributeValueForExtensionClass:[BuzzCount class]];
  if ([str length] > 0) {
    NSNumber *number = [NSNumber numberWithInt:[str intValue]];
    return number;
  }
  return nil;
}

@end

@implementation BuzzCount
+ (NSString *)extensionElementURI { return kBuzzNamespace; }
+ (NSString *)extensionElementPrefix { return kBuzzNamespacePrefix; }
+ (NSString *)extensionElementLocalName { return @"count"; }
@end

